#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int NN=1e5+4;
int c[NN],a[NN][6],m;
struct segment_tree
{
	int l,r;
	ll v[6][6];
	segment_tree operator+(const segment_tree&it)const
	{
		segment_tree tmp;
		for(int i=0;i<=m;i++)
			for(int j=0;j<=m;j++)
				tmp.v[i][j]=-1e18;
		tmp.l=l,tmp.r=it.r;
		for(int i=0;i<=m;i++)
			for(int j=0;j<=m;j++)
				for(int k=0;k<=m;k++)
					tmp.v[i][k]=max(tmp.v[i][k],v[i][j]+it.v[j][k]);
		return tmp;
	}
}tr[NN<<2];
void build(int u,int l,int r)
{
	tr[u].l=l,tr[u].r=r;
	if(l==r)
	{
		for(int i=0;i<=m;i++)
			for(int j=0;j<=m;j++)
				tr[u].v[i][j]=-1e18;
		for(int i=1;i<=m;i++)
			tr[u].v[i][i]=a[l][i];
		tr[u].v[c[l]][0]=tr[u].v[0][c[l]]=tr[u].v[0][0]=a[l][c[l]];
		return;
	}
	int mid=l+(r-l)/2;
	build(u<<1,l,mid);
	build(u<<1|1,mid+1,r);
	tr[u]=tr[u<<1]+tr[u<<1|1];
}
void modify(int u,int p)
{
	if(tr[u].l==tr[u].r)
	{
		for(int i=0;i<=m;i++)
			for(int j=0;j<=m;j++)
				tr[u].v[i][j]=-1e18;
		for(int i=1;i<=m;i++)
			tr[u].v[i][i]=a[tr[u].l][i];
		tr[u].v[c[tr[u].l]][0]=tr[u].v[0][c[tr[u].l]]=tr[u].v[0][0]=a[tr[u].l][c[tr[u].l]];
		return;
	}
	int mid=tr[u].l+(tr[u].r-tr[u].l)/2;
	if(p<=mid)
		modify(u<<1,p);
	else
		modify(u<<1|1,p);
	tr[u]=tr[u<<1]+tr[u<<1|1];
}
segment_tree query(int u,int l,int r)
{
	if(tr[u].l>=l&&tr[u].r<=r)
		return tr[u];
	int mid=tr[u].l+(tr[u].r-tr[u].l)/2;
	if(r<=mid)
		return query(u<<1,l,r);
	if(l>mid)
		return query(u<<1|1,l,r);
	return query(u<<1,l,r)+query(u<<1|1,l,r);
}
int main()
{
	freopen("paint.in","r",stdin);
	freopen("paint.out","w",stdout);
	int n,q;
	scanf("%d%d%d",&n,&m,&q);
	for(int i=1;i<=n;i++)
		scanf("%d",&c[i]);
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
			scanf("%d",&a[i][j]);
	build(1,1,n);
	ll lastans;
	printf("%lld\n",lastans=tr[1].v[0][0]);
	while(q--)
	{
		int op;
		scanf("%d",&op);
		if(op==1)
		{
			ll p,x;
			scanf("%lld%lld",&p,&x);
			p^=lastans,x^=lastans;
			c[p]=x;
			modify(1,p);
		}
		else
		{
			ll l,r;
			scanf("%lld%lld",&l,&r);
			l^=lastans,r^=lastans;
			printf("%lld\n",lastans=query(1,l,r).v[0][0]);
		}
	}
	return 0;
}
